package org.zxyj.manage.service;

import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Map;

/**
 * 裁剪图片service
 * @author     ly
 * @see        [相关类/方法]
 * @since      [产品/模块版本]
 */
public interface ICropService
{
    
    /**
     * 裁剪图片指定区域，返回文件流
     * @param source  源文件路径
     * @param destUrl 输出路径
     * @param imgName 文件名称
     * @param params 参数
     * @return  文件流
     * @throws IOException 
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    BufferedImage cropPosBuffered(String source,Map<String,Integer> params) throws IOException;
    
    /**
     * 裁剪图片指定区域，无返回值生成文件流
     * @param source  源文件路径
     * @param destUrl 输出路径
     * @param imgName 文件名称
     * @param params 参数
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    //void cropPos(String source,String destUrl,String imgName,Map<String,Integer> params);
    void cropPos(Map<String,Object> params);
    
    /**
     * 裁剪图片指定区域，生成文件
     * @param image 图片流
     * @param destUrl 目标输出路径
     * @param imgName 文件名称
     * @param params
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    //void cropPos1(BufferedImage image,String destUrl,String imgName,Map<String,Integer> params);
    void cropPos1(Map<String,Object> params);
    
    /**
     * 获取图片裁剪区域图片流
     * @param path 源文件路径
     * @param params
     * @return 图片流
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    BufferedImage getCropImageBuffered(Map<String,Object> params);
    
    /**
     * 读取路径文件为图片文件流
     * @param tempPicUrl
     * @return
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    BufferedImage readImageBuffered(String tempPicUrl);
    
    /**
     * 裁剪图片指定区域，返回文件流
     * @param source  源文件路径
     * @param destUrl 输出路径
     * @param imgName 文件名称
     * @param params 参数
     * @return  文件流
     * @throws IOException 
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    BufferedImage cropPosBuffered(BufferedImage source,Map<String,Integer> params) throws IOException;
    
    /**
     * 裁剪图片指定区域-从右上角开始裁剪
     * @param source 源文件
     * @param destUrl 目标文件路径
     * @param imgName 文件名称
     * @param params
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    void cropPosRightTop(String source,String destUrl,String imgName);
    
    /**
     * 裁剪图片指定区域-从右上角开始裁剪
     * @param source 源文件
     * @param destUrl 目标文件路径
     * @param imgName 文件名称
     * @param params
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    //void cropPosRightTop(String source,String destUrl,String imgName,Map<String,Integer> params);
    
    /**
     * 裁剪图片指定区域-从右上角开始裁剪
     * @param source 源文件
     * @param params
     * @return 文件流
     * @throws NumberFormatException
     * @throws IOException
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    BufferedImage cropPosRightTopBuffered(String source,Map<String,Integer> params) throws NumberFormatException, IOException;
 
    /**
     * 图片旋转方法
     * @param sourceUrl 源文件路径
     * @param destUrl 目标路径
     * @param rotate 旋转角度
     * @throws IOException
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    //void imageRotateToFile(String sourceUrl,String destUrl,double rotate) throws IOException;
    void imageRotateToFile(Map<String,Object> params) throws IOException;
    
    /**
     * 图片旋转方法-格式转换
     * @param resourceUrl 源文件路径
     * @param rotate 旋转角度
     * @throws IOException
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    //BufferedImage imageRotateToBuff(String resourceUrl,double rotate) throws IOException;
    BufferedImage imageRotateToBuff(Map<String,Object> params) throws IOException;
    
    /**
     * 裁剪图片-来源是URL
     * @param width 裁剪后图片宽度
     * @param height 裁剪后图片高度
     * @param x x轴偏移量
     * @param y y轴偏移量
     * @param source 源图片文件路径
     * @param dest 裁剪后图片文件路径
     * @throws IOException 
     */
    //void imageCropFromUrl(long width1, long height1, long x1, long y1, String source, String dest) throws IOException;
    void imageCropFromUrl(Map<String,Object> params) throws IOException;

    /**
     * 裁剪图片-来源是图片流
     * @param width 裁剪后图片宽度
     * @param height 裁剪后图片高度
     * @param x x轴偏移量
     * @param y y轴偏移量
     * @param source 源图片文件路径
     * @param dest 裁剪后图片文件路径
     * @throws IOException 
     */
    //void imageCropFromBuff(long width1, long height1, long x1, long y1, BufferedImage image, String dest) throws IOException;
    void imageCropFromBuff(Map<String,Object> parmas) throws IOException;
    
    /**
     * 图片裁剪方法-用于校验正面后裁剪
     * @param record 答卷记录
     * @param image 图片流
     * @param kmdjDiffAll 答卷比对偏差集
     * @param cjcsMap 裁剪参数集
     * @param ksbh 考号
     * @param ksxxMap 考生信息集
     * @throws IOException
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    /*void cropImageForZm(HttpSession session,CoursePaperDetail record,BufferedImage image,Map<String,Map<String,Integer>> kmdjDiffAll,
        Map<String,Map<String,Object>> cjcsMap,String ksbh,Map<String,String> ksxxMap) throws IOException;*/
    void cropImageForZm(Map<String,Object> map) throws IOException;
    
    /**
     * 图片裁剪方法-用于校验反面后裁剪
     * @param record 答卷记录
     * @param kmdjDiffAll 科目答卷比对偏差集
     * @param cjcsMap 裁剪参数集
     * @param ksbh 考号
     * @param ksxxMap 考生信息集
     * @throws IOException
     * @see   [类、类#方法、类#成员]
     * @since [产品/模块版本]
     */
    void cropImageForFm(Map<String,Object> map) throws IOException;
    
    /**
     * 裁剪指定区域图片
        * @Title: getPositionBufferedImage
        * @param @param map
        * @param @return    参数
        * @return Map<String,Object>    返回类型
        * @throws
     */
    Map<String,Object> getPositionBufferedImage(Map<String,Object> map);
    
}
